برنامه ریز Programmer توسط کارت صوتی

این پروژه فقط برای این است که هموطنان عزیزی که مایل به استفاده از Bootloader هستند و امکان تهیه یک برنامه ریز ( Programer ) را ندارند بتوانند با کمترین هزینه برنامه Bootloader را در حافظه میکروکنترلر در قسمت Boot Block قرار دهند.
این برنامه بر اساس این فایل Programming Specification PIC18F2XXX_4XXX FAMILY نوشته شده و دارای محدودیت هایی نیز هست. این برنامه مقایسه (Verify) نمیکند, EEPROM داخلی را نمینویسد و Device ID را نمی خواند.

توضیح برنامه

این نمای ظاهری برنامه است.
میتوانید از اینجا Sound_Programerدانلود کنید.

SoundProgImage

این برنامه در هنگام شروع مشخصات کارت صوتی کامپیوتر را میخواند و دستگاههایی را که مربوط به خروجی هستند را نشان میدهد. توجه داشته باشید که اکثر کارتهای صوتی معمولا فقط دستگاهایی را که وصل شده باشند را نشان میدهند, یعنی اگر کارت صوتی شما دارای خروجی هدفون باشد ولی هدفون به آن وصل نشده باشد, این برنامه آنرا شمارش نمیکند و نشان نمیدهد. برنامه کد هگز مربوط به بوت لادر را میگیرد و از آن یک فایل بینر میسازد که کارت صوتی قادر به پخش آن باشد.
برنامه کارت صوتی را بدینصورت تنظیم میکند:
- فرکانس نمونه برداری 44100 هرتز,( Sample Frequency )
- دقت 8-بیت,
- استریو ( کانال چپ برای PGC و کانال راست برای PGD )
در هنگام آزمایش من متوجه شدم که کارت صوتی کامپیوتر من بیت ها را معکوس میکند ( 180 درجه اختلاف فاز), بهمین دلیل در برنامه این گزینه در نظر گرفته شده زیرا مطمٔن نبودم که آیا همه کارتهای صوتی اینگونه هستند یا خیر, دلیلش را هم نمی دانم که چرا بیت را معکوس میکنند.
در حالت معمولی این گزینه (Inverting) فعال است.
در هر صورت اگر اسیلوسکوپ در اختیار دارید خیلی ساده میتوانید مطمٔن شوید در غیر اینصورت اگر Bootloader بعد از برنامه ریزی کار نکرد گزینه Inverting را غیر فعال کنید و دوباره امتحان کنید.
بعضی از میکروکنترلرهای نوع PIC را میتوان به دو صورت برنامه ریزی کرد, یکی توسط ولتاژ بالا حدود 12 ولت ( HVP: High-Voltage ICSP ) و دیگری ولتاژ پایین 5 ولت ( LVP:Low-Voltage ICSP )
گزینه ولتاژ پایین را میتوان توسط بیت های مخصوصی در قسمت تنظیمات ( Configuration ) فعال یا غیر فعال کرد.
گزینه ولتاژ بالا را همیشه میتوان استفاده کرد.
اگر Bootloader در حافظه وارد شود, او این گزینه LVP را غیر فعال میکند تا تمامی پایه ها در اختیار باشد.

در حالت معمولی (default) گزینه ولتاژ پایین فعال است, نکته منفی این روش اینست که یک پایه ( RB5/KBI1/PGM ) از کنترلر را از دست می دهیم.
من فرض را بر این می گزارم که برنامه ریزی با ولتاژ بالا را استفاده میکنیم, برای اینکار علاوه بر ولتاژ 5 ولت تغذیه به ولتاژی حدود 12.5 ولت نیز نیاز است
شما میتوانید این 2 ولتاژ را از یک منبع تغذیه کامپیوتر داشته باشید.
من اینکار را برای آزمایش انجام دادم.
اینترفیس برنامه ریزی در این میکروکنترلر دارای این نامها هستند, شماره پایه ها بستگی به نوع آن (28 پایه یا 44 پایه) تغیر میکند:
- MCLR/VPP/RE3
- PGD/RB7/KBI3
- PGC/RB6/KBI2
- PGM/RB5/KBI1
علاوه بر اینها خط 5 ولت و زمین (GND) نیز اضافه میشود.
برای ورود به حالت برنامه ریزی باید به روش و زمانبندی خاصی هر دو ولتاژ را به کنترلر وصل کنیم. در فایل بالا ترتیب و زمانبندی آنرا توضیح میدهد.
اگر کنترلر نو باشد و تابحال برنامه ریزی نشده باشد و بیت LVP در حافظه CONFIG4L:bit-2 فعال نباشد, میتوان از ولتاژ بالا صرفنظر کرد و با ولتاژ 5 ولت تغذیه نیز آی سی را برنامه ریزی کرد.

سخت افزار این مدار

چون ولتاژ خروجی کارت صوتی بین Volt ( +/-0,7 ... +/-2 ) است, ساده ترین راه برای تبدیل آن به 5 ولت, استفاده از یک ترانزیستور است. بدین صورت:

Level-shifter Image

شماره این ترانزیستور منفی (NPN) زیاد مهم نیست و میتوان از انواع مختلف استفاده کرد فقط ضریب تقویت جریان (ß) آن بیشتر از 50 باشد.
این مدار خودش یک معکوس کننده است, یعنی سیگنال ورودی با تفاوت 180 درجه در خروجی ظاهر میشود. این برای کار ما مهم نیست زیرا در نرم افزار گزینه معکوس کننده وجود دارد.
اگر کارت صوتی شما معکوس کننده باشد, گزینه Inverting باید غیر فعال باشد.
نقص این مدار اینست که ولتاژ خروجی باید حداقل 0.7 ولت باشد تا ترانزیستور بتواند اشباع شود.(ولوم صدا در حداکثر)
این مدار برای هر کانال جداگانه است.
برای زمان بندی ولتاژ برنامه ریزی Vpp میتوان بعنوان مثال از این نوع مدارات استفاده کرد.
در این مدار ولتاژ Vpp با شتاب مثبتی در حدود 2 میکرو ثانیه (از صفر به 5 ولت) بعد از وصل کردن کلید وصل میشود.

VppTiming Image

توجه کنید که ولتاژ Vpp نباید حتما بلافاصله بعد از وصل شدن ولتاژ تغذیه وصل شود, نکته خیلی مهم اینست که باید در مدت 2 میکروثانیه از 10% به 90% سطح ولتاژ معمولش برسد تا کنترلر به حالت برنامه ریزی وارد شود.
این بدین معنی است که در هنگام وصل کردن نباید از خازن برای تصویه و ذخیره برای آن استفاده کرد.

روش دیگر استفاده از یک مقایسه کننده مثل LM393 یا LM339 است. این آی سی (LM393) دارای دو مقایسه کننده است و دیگری (LM339) دارای چهار, که میتوان از 2 تا برای سیگنال ها استفاده کرد.
من برای آزمایش از این مدار استفاده کرده ام.

LM393 Image

این طرز اتصالات فیش کارت صوتی است. Klinke Buchse Image

این شکل سیگنال ها قبل و بعد از مقایسه کننده است.
بایت فرستاده شده دارای مقدار 0x55 است.
Signal form vor Signal form Nach

در هر دو صورت با مقدار کمی هزینه میتوان Bootloader را برنامه ریزی کرد.
بدلیل سادگی مدار لزوما احتیاج به فیبر چاپی نیست و میتوانید آنرا روی فیبر سوراخدار براحتی آنرا درست کنید.
علاوه براین, روش استفاده از کارت صوتی میتواند راهنمای خوبی باشد تا شما ایده های خود را عملی کنید.
شما قادر خواهید بود با هزینه کم انواع دیگر کنترلر را نیز برنامه ریزی کنید.
اگر از کانال Line-In صوتی استفاده کنید, میتوانید قابلیت Verify را نیز اضافه کنید و حتی قادر خواهید بود که سنسورهای مختلفی را به ابن ورودی ها وصل کرده و نمودار آنان را روی کامپیوتر خود رسم کنید.
( فانتزی شما مرزی ندارد )
به دلیل محدود بودن فضای سایت, من نمی توانم همه کد را اینجا در اختیارتان بگزارم, اگر مابل به مطالعه کد هستید از قسمت نظر شما استفاده کنید تا برایتان ارسال شود.